home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 March
/
EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso
/
earcd
/
gnu
/
gnupltdc.lha
/
docs
/
termdoc.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-01-22
|
2KB
|
67 lines
/* this file is included into all the doc2* convertors
* it provides a replacement for fgets() which inserts all the
* help from the terminal drivers line by line at the < in the
* gnuplot.doc file. This way, doc2* dont need to know what's going
* on, and think it's all coming from one place
*/
#ifdef TEST
#include <stdio.h>
#endif
#include <ctype.h>
/* may need to something more clever for 64k machines ? */
#define GOT_DRIVER_H /* a complete lie, but they dont need it ! */
#define TERM_HELP
#define START_HELP(x) /* nothing */
#define END_HELP(x) ,
char *termtext[] = {
#include "term.h"
NULL
};
char *get_line(char *buffer, int max, FILE *fp)
{
static int line=-1; /* not going yet */
static int level=0; /* terminals are at level 0 - we add this */
if (line == -1) {
if (!fgets(buffer, max, fp))
return NULL; /* EOF */
if (buffer[0] != '<')
return buffer; /* the simple case */
/* prepare to return text from the terminal drivers */
level=buffer[1]-'0';
line=0;
}
/* we're sending lines from terminal help */
/* more efficient to return pointer, but we need to modify it */
strncpy(buffer, termtext[line], max);
strncat(buffer, "\n", max);
if (isdigit(buffer[0]))
buffer[0] += level;
if (!termtext[++line])
line=(-1); /* we've done the last line, so get next line from file */
return buffer;
}
#ifdef TEST
int main()
{
char line[256];
while(get_line(line, 256, stdin))
fputs(line, stdout);
return 0;
}
#endif
#define fgets(a,b,c) get_line(a,b,c)